//package com.ksd.api.task;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.ksd.common.config.PlayControlConfig;
//import com.ksd.common.tool.FileTools;
//import com.ksd.common.utils.DateUtils;
//import com.ksd.common.utils.StringUtils;
//import com.ksd.common.utils.file.FileUploadUtils;
//import com.ksd.quartz.http.DRMHttpClient;
//import com.ksd.quartz.http.NIOFileDownloader;
//import com.ksd.quartz.task.beans.SynchDataRequest;
//import com.ksd.quartz.task.beans.SynchDataResponse;
//import com.ksd.quartz.util.TaskConstans;
//import com.ksd.quartz.util.UnzipUtility;
//import com.ksd.system.domain.*;
//import com.ksd.system.service.*;
//import com.ksd.system.service.impl.AsynchWeatherService;
//import com.ksd.web.controller.service.MovieFileService;
//import com.ksd.web.controller.service.SongFileService;
//import org.slf4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.*;
//
//
//@Component
//@EnableScheduling
//public class SynchZipDataTask {
//
//    private static final Logger logger = org.slf4j.LoggerFactory.getLogger(SynchZipDataTask.class);
//
//    @Autowired
//    private ISysBoardService sysBoardService;
//    @Autowired
//    private ISysSynchDataService sysSynchDataService;
//    @Autowired
//    private SongFileService songFileService;
//    @Autowired
//    private MovieFileService movieFileService;
//
//    private static final String LOCAL_DIR = "local_movies";
//    private Map<String, Integer> uploadProgressMap = new HashMap<>();
//    private Map<String, Integer> uploadProgressTotalMap = new HashMap<>();
//
////    @Scheduled(cron = "0 0 */8 * * ?")
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void getContentData()
//    {
//        logger.info("向外网部署的政企内容同步系统接口查询是否有待同步的内容(电影/音乐)压缩包地址");
//        SysBoard sysBoardSynchFlag = sysBoardService.selectSysBoardById(SysBoard.cloudSynchFlag);
//        if (sysBoardSynchFlag.getUrl().equals("1")){
//            logger.info("向云服务系统请求最新待同步的压缩包地址，判断是否需要同步入数据库内，入库后，系统会将其压缩包解压并入库=========关闭");
//            return;
//        }else{
//            logger.info("向云服务系统请求最新待同步的压缩包地址，判断是否需要同步入数据库内，入库后，系统会将其压缩包解压并入库=========开启");
//        }
//        //先通过接口将压缩包数据下载到本地服务上-->进入数据导入表记录中
//        //解压
//        //读取配置文件,分辨是电影内容还是音乐内容
//        //入库--->批次记录
//        SysBoard sysBoardSynchKey = sysBoardService.selectSysBoardById(SysBoard.operatorKey);
//        SynchDataRequest request = new SynchDataRequest();
//        request.setOperatorKey(sysBoardSynchKey.getUrl());
//
//        String requestGson = JSONObject.toJSONString(request);
//
//        SysBoard sysBoardSynch = sysBoardService.selectSysBoardById(SysBoard.cloudSynchAddressId);
//        String url = sysBoardSynch.getUrl()+ TaskConstans.synchContentDataZipUrl;
//        logger.info("[system-synchDataZip] SynchContentDataZipTask Interface url :" + url);
//        logger.info("[system-synchDataZip] SynchContentDataZipTask Interface Request :" + requestGson);
//
//        String response = DRMHttpClient.udrmHttpDoPost(url, requestGson);
//        ObjectMapper mapperPage = new ObjectMapper();
//        try {
//            SynchDataResponse synchDataResponse = mapperPage.readValue(response, SynchDataResponse.class);
//            logger.info("[system-synchDataZip] SynchContentDataZipTask Interface Response :" + synchDataResponse.toString());
//            if (StringUtils.isNotNull(synchDataResponse)) {
//                Integer status = synchDataResponse.getStatus();
//                if (status == -1){
//                    logger.info(synchDataResponse.getMessage());
//                    return;
//                }else{
//                    SysBoard sysBoard = sysBoardService.selectSysBoardById(SysBoard.serviceFileId);//将机顶盒升级包下载到服务器上,机顶盒能够直接放到到
//                    //获取最新jar,将机顶盒jar包同步到本地
//                    String zipPath = synchDataResponse.getZipPath();//该文件地址需要能够通过服务器直接访问到,即在云服务器上已部署在nginx指定目录下
//                    String zipName = synchDataResponse.getZipName();
////                    String fileType = synchDataResponse.getFileType();
//                    SysSynchData sysSynchData = new SysSynchData();
//                    List<SysSynchData> synchDataList = sysSynchDataService.selectSysSynchDataList(sysSynchData);
//                    String dataPath = File.separator+"playcontrol_data_zip"+File.separator+ DateUtils.dateTimeNow();
//                    String downPath = PlayControlConfig.getNginxRootPath()+ dataPath+File.separator+zipName;
//                    String mappedPath = PlayControlConfig.getMappingPath()+ dataPath+File.separator+zipName;
//                    logger.info("待同步的内容数据更新下载到服务器地址:"+downPath);
//                    Boolean downFlag = false;
//                    if (synchDataList.size() > 0) {
//                        sysSynchData = synchDataList.get(0); //对比最新内容同步数据地址是否一致
//                        String statusSql = sysSynchData.getStatus();
//                        if (!sysSynchData.getCloudPath().equals(zipPath)){
//                            logger.info("内容压缩包升级更新下载,将更新到服务地址:"+downPath);
//                            //将该待同步的内容压缩包下载下来,同时需要下载到指定目录下,即该系统服务器的nginx指定目录下
//                            try {
//                                downFlag = NIOFileDownloader.downloadFile(zipPath, downPath);
//                                if (downFlag){
//                                    logger.info("内容压缩包文件下载成功:"+downPath);
//                                    logger.info("待同步的压缩包更新映射到服务器的地址:"+mappedPath);
//                                    //同步升级信息
//                                    String startUrl = sysBoard.getUrl();
//                                    if (startUrl.startsWith("http://127.0.0.1")){
//                                        startUrl = "";
//                                    }
//                                    sysSynchData.setUrl(startUrl+mappedPath);
//                                    sysSynchData.setCloudPath(zipPath);
////                                    sysSynchData.setType(fileType);
//                                    sysSynchData.setStatus("3"); //开始进入解压缩步骤
//                                    sysSynchDataService.updateSysSynchData(sysSynchData);
//                                }else{
//                                    logger.error("内容压缩包文件下载失败,"+downPath);
//                                    sysSynchData.setStatus("-3");
//                                    sysSynchDataService.updateSysSynchData(sysSynchData);
//                                }
//                            } catch (IOException e) {
//                                sysSynchData.setStatus("-3");
//                                sysSynchDataService.updateSysSynchData(sysSynchData);
//                                logger.error("内容压缩包文件下载失败: " + e.getMessage()+" ,待下载的机顶盒版本地址:"+zipPath);
//                            }
//                        }else{
//                            logger.info("内容压缩包:"+zipPath+"已与云服务同步,无需下载同步");
//                        }
//                    }else {
//                        logger.info("内容压缩包:"+zipPath+",第一次同步,将压缩包更新到服务地址:"+downPath);
//                        String startUrl = sysBoard.getUrl();
//                        if (startUrl.startsWith("http://127.0.0.1")){
//                            startUrl = "";
//                        }
//                        //同步内容信息
//                        sysSynchData.setCloudPath(zipPath);
//                        sysSynchData.setUrl(startUrl+mappedPath);
//                        sysSynchData.setUpdateTime(new Date());
//                        sysSynchData.setCreateTime(new Date());
////                        sysSynchData.setType(fileType);
//                        sysSynchData.setStatus("3");//开始进行解压缩步骤
//                        sysSynchDataService.insertSysSynchData(sysSynchData);
//                        try {
//                            downFlag = NIOFileDownloader.downloadFile(zipPath, downPath);
//                            if (downFlag){
//                                logger.info("内容压缩包文件下载成功:"+downPath);
//                                logger.info("待同步的内容压缩包更新映射到服务器的地址:"+mappedPath);
//                            }else{
//                                logger.error("内容压缩包文件下载失败,"+downPath);
//                                sysSynchData.setStatus("-3");//文件下载失败
//                                sysSynchDataService.updateSysSynchData(sysSynchData);
//                            }
//                        } catch (IOException e) {
//                            sysSynchData.setStatus("-3");
//                            sysSynchDataService.updateSysSynchData(sysSynchData);
//                            logger.error("待同步的内容压缩包文件下载失败: " + e.getMessage()+" ,待下载同步的内容压缩包地址:"+zipPath);
//                        }
//                    }
//
//                    if (downFlag){
//                        logger.info("待同步的内容数据压缩包已下载成功:"+downPath+", 开始进行解压缩、入库处理");
//                        logger.info("压缩包上传到服务器的路径filePath:"+downPath);
//
//                        String synchDataPath = File.separator+"playcontroller_synch_data"+File.separator+ DateUtils.dateTimeNow();
//                        String synchFilePath = PlayControlConfig.getNginxRootPath()+  synchDataPath; //服务器文件实际存储地址
////                        String mapperFilePath = PlayControlConfig.getMappedAddress()+  synchDataPath; //服务器文件映射地址
//                        sysSynchData.setUnzipPath(synchFilePath);
//                        sysSynchDataService.updateSysSynchData(sysSynchData);
//                        try {
////                            System.out.println("进行解压缩操作");
//                            sysSynchData.setUpdateTime(new Date());
//                            UnzipUtility.unzip(downPath,synchFilePath);
////                            System.out.println("解压缩完成");
//                        } catch (IOException e) {
//                            sysSynchData.setStatus("-2"); //解压失败
//                            sysSynchData.setUpdateTime(new Date());
//                            sysSynchDataService.updateSysSynchData(sysSynchData);
//                            throw new RuntimeException(e);
//                        }
//                        sysSynchData.setStatus("0"); //等待同步
//                        sysSynchDataService.updateSysSynchData(sysSynchData);
//                        logger.info("解析上传目录的文件的所有文件,进行数据录入,可能存在电影,音乐");
//                    }
//                }
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            logger.error(e.getMessage());
//        }
//
//        logger.info("将内容压缩包同步到本地服务器结束");
//
//    }
//
//    /**
//     * 上传指定文件夹下的所有文件和文件夹到目标路径
//     * @param sourceDir 源文件夹路径
//     */
//    public int uploadFilesAndFolders(String sourceDir, int count, String taskId,String userName,Integer totalFileSizes,String fileType) {
//        logger.info("===========================uploadFilesAndFolders*************************************");
//        File source = new File(sourceDir);
////        File destination = new File(destDir);
//
//        // 检查源文件夹是否存在
//        if (!source.exists()) {
//            logger.error("源文件夹不存在: " + sourceDir);
//            return count;
//        }
//        // 检查目标文件夹是否存在，不存在则创建
////        if (!destination.exists()) {
////            destination.mkdirs();
////        }
//        // 遍历源文件夹下的所有文件和文件夹
//        File[] files = source.listFiles();
//
//        if (files != null) {
//            for (File file : files) {
//
//                if (file.isDirectory()) {
//                    logger.info("依旧是文件夹格式");
//                    // 如果是文件夹，递归调用上传方法
////                    String newDestDirTemp = destDir + File.separator + file.getName();
//                    String newSourceDir = file.getAbsolutePath();
////                    count = uploadFilesAndFolders(newSourceDir, newDestDirTemp,count,taskId,userName,totalFileSizes,fileType);
//                    count = uploadFilesAndFolders(newSourceDir,count,taskId,userName,totalFileSizes,fileType);
//                    logger.info("文件夹上传个数uploadedFilesCount count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
//                    logger.info("文件夹计算进度 progress count:"+progress);
////                    uploadProgressMap.put(taskId, progress);
//                } else {
////                    System.out.println("确定是单个文件,开始进行文件复制");
////                    System.out.println("文件进行复制:$$$$$$$$$$$" + file.getAbsolutePath());
//                    String destDirectory = PlayControlConfig.getNginxRootPath();
//                    String configFileName = file.getName();
//                    if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.XML_NAME)){
//                        File parentFile = file.getParentFile();
////                        System.out.println("uploadFilesAndFolders:"+parentFile.getAbsolutePath());
////                        File[] files1 = parentFile.listFiles();
////                        for (File everyFile : files1) {
////                            String newDestDirTemp = destDir + File.separator + everyFile.getName();
////                            System.out.println("newDestDirTemp:"+newDestDirTemp);
////                            FileUtils.copyFileToDirectory(file.getAbsolutePath(),newDestDirTemp);
////                        }
////                        System.out.println(fileType+" fileType的值");
////                    File[] uploadFile = parentFile.listFiles();
////                    for (File s : uploadFile) {
//                        if (SysTvType.movieDefaultId.equals(fileType)){
////                            System.out.println("电影内容的数据处理@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
//                            movieFileService.setMovieUpdateFile(parentFile.getAbsolutePath(),userName,taskId);
//                        }else if(SysTvType.songDefaultId.equals(fileType)) {
////                            System.out.println("歌曲内容的数据处理&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//                            songFileService.setSongUpdateFile(parentFile.getAbsolutePath(), userName, taskId);
//                        }
//                        count++;
////                    }
//                    }
//
////                    System.out.println("文件上传个数count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
////                    System.out.println("计算进度 progress:"+progress);
//                    uploadProgressMap.put(taskId, progress);
//                }
//            }
//        }
//        return count;
//    }
//
//}